Many different types of computing systems have attained widespread use around the world. These computing systems include personal computers, servers, mainframes, work stations, and a wide variety of stand-alone and embedded computing devices. Sprawling client-server systems exist, with applications and information spread across many PC networks, mainframes and minicomputers. In a distributed system connected by networks, a user may access many application programs, databases, network systems, operating systems and mainframe applications. Computers provide individuals and businesses with a host of software applications including word processing, spreadsheet, web-publishing, databases, and accounting. Further, networks enable high speed communication between people in diverse locations by way of e-mail, websites, instant messaging, and web-conferencing.
At the heart of every computer, server, workstation and mainframe is a microprocessor. A common architecture for high performance, single-chip microprocessors is the reduced instruction set computer (RISC) architecture characterized by a small simplified set of frequently used instructions for rapid execution. Thus, in a RISC architecture, a complex instruction comprises a small set of simple instructions that are executed in steps very rapidly. These steps are performed in execution units adapted to execute specific simple instructions. In a superscalar architecture, these execution units typically comprise load/store units, integer Arithmetic/Logic Units, floating point Arithmetic/Logic Units, and Graphical Logic Units that operate in parallel. In a processor architecture, an operating system controls operation of the processor and components peripheral to the processor. Executable application programs are stored in a computer's hard drive. The computer's processor causes application programs to run in response to user inputs.
Thus, a computer will have a processor for executing operating system software and applications software. This software is stored electronically on a hard drive of the computer. Almost all software installed in the field, including operating system software, requires periodic updates to the software to be installed. These patch updates are distributed by the developer of the original software to provide bug fixes and enhancements to the original product. The original software is purchased with a license by a customer. The original software may be sold by download from a website making payment by credit card, or may be purchased on a disk at a local store. In contrast, updates to the original software installation are distributed freely by way of a website posted by the developer. Thus, a user may go to a website of a developer and select from a plurality of available updates for download. By pressing a download key, the software update package of updated files is downloaded to the requesting computer. For example, updates to the Microsoft® Windows® operating system comprise update packages, a package normally consisting of only those files which have changed from the original version. The changed files are individually updated.
For the Linux operating system, however, the standard software delivery and installation mechanism is by way of Red hat Package Manager (RPM) files. The RPM provides no mechanism for updating individual files without causing the RPM utilities to give errors in typical management functions such as verifying the integrity of the installed software. Rather, the RPM provides all the software files as an entire re-installation. If the product is to be distributed to only licensed users, this prevents the RPM from being posted on a freely available website, because anyone with access could install and use the product unlicensed.
One known solution to this problem is to encrypt the update with a random encryption and to perform a key exchange with the licensed user. This solution requires that all customers who purchased the original product be tracked in a database, and then using this database to notify the licensed customer in a secure manner of the update and the required decryption key. Clearly, this solution requires extensive administrative overhead. And, the solution is only viable if a licensed user tracking process is in place when the product is first released.
What is needed is an update method that verifies the existence of an installation when a user selects to update.